import 'package:flutter/material.dart';
import 'package:flutter_inappwebview/flutter_inappwebview.dart';
import 'package:url_launcher/url_launcher.dart';

import '../utils/UrlLauncherUtils.dart';
/// 通用WebView组件
class WebViewPage extends StatefulWidget {
  /// 初始加载的URL
  final String url;

  /// 页面标题（为空时自动获取网页标题）
  final String? title;

  /// 是否显示顶部导航栏（包含标题、返回按钮等）
  final bool showAppBar;

  /// 导航栏背景色
  final Color appBarColor;

  /// 导航栏标题样式
  final TextStyle? titleStyle;

  /// 初始化参数（可选，用于自定义WebView配置）
  final InAppWebViewSettings? inAppWebViewSettings;

  /// 页面加载完成回调
  final void Function(InAppWebViewController controller, String url)? onPageFinished;

  /// JavaScript调用Flutter的回调（需配合addJavaScriptHandler使用）
  final void Function(List<dynamic> args)? onJsMessageReceived;

  const WebViewPage({
    super.key,
    required this.url,
    this.title,
    this.showAppBar = true,
    this.appBarColor = Colors.white,
    this.titleStyle,
    this.onPageFinished,
    this.onJsMessageReceived, this.inAppWebViewSettings,
  });

  @override
  State<WebViewPage> createState() => _WebViewPageState();
}

class _WebViewPageState extends State<WebViewPage> {
  late InAppWebViewController _webViewController;
  double _progress = 0; // 加载进度
  String? _pageTitle; // 网页标题（自动获取）
  final InAppWebViewSettings _defaultOptions =  InAppWebViewSettings(
  // 基础设置
  // useShouldOverrideUrlLoading: true, // 是否拦截URL加载
  javaScriptEnabled: true, // 启用JavaScript
  javaScriptCanOpenWindowsAutomatically: false, // 禁止JS自动打开窗口
  loadWithOverviewMode: true, // 自适应屏幕
  useWideViewPort: true, // 支持宽视图

  // 缓存设置
  cacheMode: CacheMode.LOAD_DEFAULT, // 默认缓存模式
  domStorageEnabled: true, // 启用DOM存储
  databaseEnabled: true, // 启用数据库存储

  // 界面设置
  allowsInlineMediaPlayback: true, // 允许视频内联播放
  mediaPlaybackRequiresUserGesture: true, // 媒体播放需要用户交互
  supportZoom: true, // 支持缩放
  builtInZoomControls: true, // 显示缩放控件
  displayZoomControls: false, // 隐藏原生缩放控件（通常配合自定义控件）

  // 安全设置
  mixedContentMode: MixedContentMode.MIXED_CONTENT_ALWAYS_ALLOW, // 允许混合内容
  // safeBrowsingEnabled: true, // 启用安全浏览

  // 其他实用设置
  useOnDownloadStart: true, // 监听下载事件
  // allowFileAccess: false, // 禁止访问本地文件
  // allowContentAccess: false, // 禁止通过内容URL访问

  // userAgent: "Custom User Agent", // 自定义User Agent
  );


  @override
  Widget build(BuildContext context) {
    return Scaffold(
      // 顶部导航栏
      appBar: widget.showAppBar ? _buildAppBar() : null,
      body: Column(
        children: [
          // 加载进度条（进度>0时显示）
          if (_progress > 0 && _progress < 1)
            LinearProgressIndicator(
              value: _progress,
              backgroundColor: Colors.transparent,
              valueColor: const AlwaysStoppedAnimation<Color>(Colors.blue),
            ),
          // WebView主体
          Expanded(
            child:
          //CustomWebView(initialUrl:widget.url)

           InAppWebView(
             // shouldOverrideUrlLoading:(controller, request) async {
             //   // 关键：打印请求的 URL，确认是否为空
             //   print("拦截到 URL: ${request}");
             //
             //   // 方案 A：允许所有 URL 加载（推荐先测试此方案）
             //   return NavigationActionPolicy.ALLOW;
             //
             //   // 方案 B：仅拦截特定 URL（如需自定义处理）
             //   // if (request.url?.toString().contains("example.com") ?? false) {
             //   //   // 自定义处理逻辑
             //   //   return NavigationActionPolicy.CANCEL;
             //   // } else {
             //   //   return NavigationActionPolicy.ALLOW;
             //   // }
             // },
              // 合并默认配置和自定义配置（自定义配置优先级更高）
             initialSettings: widget.inAppWebViewSettings ?? _defaultOptions,
              // 初始URL
              initialUrlRequest: URLRequest(url: WebUri(widget.url),method: "get"),
              // WebView创建完成回调
              onWebViewCreated: (controller) {
                _webViewController = controller;
                // 注册JS调用Flutter的通道（需与前端约定方法名）
                controller.addJavaScriptHandler(
                  handlerName: "flutterHandler", // 前端调用时需匹配此名称
                  callback: (args) {
                    if (widget.onJsMessageReceived != null) {
                      widget.onJsMessageReceived!(args);
                    }
                  },
                );
              },

             onConsoleMessage: (controller, message) {
               print("WebView 控制台: ${message.message}");
               print("错误级别: ${message}"); // 可能是 ERROR、WARNING 等
             },
              // 加载进度回调
              onProgressChanged: (controller, progress) {
                setState(() {
                  _progress = progress / 100;
                });
              },
              // 页面标题变化回调
              onTitleChanged: (controller, title) {
                if (title != null && widget.title == null) {
                  setState(() {
                    _pageTitle = title;
                  });
                }
              },
              // 页面加载完成回调
              onLoadStop: (controller, url) {
               print("--------"+url.toString());
                if (url != null && widget.onPageFinished != null) {
                  widget.onPageFinished!(controller, url.toString());
                }
              },

            ),
          ),
        ],
      ),
    );
  }

  // 构建导航栏
  AppBar _buildAppBar() {
    return AppBar(
      backgroundColor: widget.appBarColor,
      leading: IconButton(
        icon: const Icon(Icons.arrow_back),
        onPressed: () async {
          // 优先返回WebView历史页，无历史则关闭当前页面
          Navigator.pop(context);
          if (await _webViewController.canGoBack()) {
            _webViewController.goBack();
          } else {
            Navigator.pop(context);
          }
        },
      ),
      title: Text(
        widget.title ?? (_pageTitle ?? ""), // 优先显示传入的标题，否则用网页标题
        style: widget.titleStyle ?? const TextStyle(color: Colors.black),
        overflow: TextOverflow.ellipsis,
      ),
      centerTitle: true,
      actions: [
        // 刷新按钮
        IconButton(
          icon: const Icon(Icons.refresh),
          onPressed: () => _webViewController.reload(),
        ),
        // 前进按钮
        IconButton(
          icon: const Icon(Icons.arrow_forward),
          onPressed: () async {
            if (await _webViewController.canGoForward()) {
              _webViewController.goForward();
            }
          },
        ),
        // 更多按钮（可扩展：如复制链接、在浏览器打开等）
        PopupMenuButton<String>(
          itemBuilder: (context) => [
            const PopupMenuItem(value: "copy", child: Text("复制链接")),
            const PopupMenuItem(value: "browser", child: Text("在浏览器打开")),
          ],
          onSelected: (value) async {
            final url =widget.url;
            print(url.toString());
            if (url == null) return;
            if (value == "copy") {
              // 复制链接到剪贴板（需引入package:clipboard/clipboard.dart）
              // Clipboard.setData(ClipboardData(text: url.toString()));
              ScaffoldMessenger.of(context).showSnackBar(
                const SnackBar(content: Text("链接已复制")),
              );
            } else if (value == "browser") {
              // 在系统浏览器打开（需引入package:url_launcher/url_launcher.dart）
              print(url.toString());
              // 1. 打开网址
              final urlResult = await UrlLauncherUtils.launch(
                type: UrlLauncherType.url,
                address: url.toString(),
              );
              UrlLauncherUtils.showResultSnackbar(context, urlResult);
                        }
          },
        ),
      ],
    );
  }
}


